home *** CD-ROM | disk | FTP | other *** search
- /* complex/test.c
- *
- * Copyright (C) 1996, 1997, 1998, 1999, 2000 Brian Gough
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
- #include <config.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <gsl/gsl_ieee_utils.h>
- #include <gsl/gsl_test.h>
- #include <gsl/gsl_math.h>
- #include <gsl/gsl_complex.h>
- #include <gsl/gsl_complex_math.h>
-
- struct f
- {
- char *name;
- double (*f) (gsl_complex z);
- double x;
- double y;
- double fx;
- double fy;
- };
-
- struct fz
- {
- char *name;
- gsl_complex (*f) (gsl_complex z);
- double x;
- double y;
- double fx;
- double fy;
- };
-
- #define FN(x) "gsl_complex_" #x, gsl_complex_ ## x
- #define ARG(x,y) x, y
- #define RES(x,y) x, y
-
- struct f list[] =
- {
- #include "results1.h"
- {"", 0, 0, 0, 0, 0}
- };
-
-
- struct fz listz[] =
- {
- #include "results.h"
- {"", 0, 0, 0, 0, 0}
- };
-
- int
- main (void)
- {
- size_t i = 0;
-
- gsl_ieee_env_setup();
-
-
- for (i = 0 ; i < 10; i++)
- {
- double r = (i - 5.0) * 0.3 ;
- double t = 2.0 * M_PI * i / 5 ;
- double x = r * cos(t), y = r * sin(t) ;
- gsl_complex z = gsl_complex_polar (r, t) ;
- gsl_test_rel (GSL_REAL(z), x, 10 * GSL_DBL_EPSILON, "gsl_complex_polar real part at (r=%g,t=%g)", r, t);
-
- gsl_test_rel (GSL_IMAG(z), y, 10 * GSL_DBL_EPSILON, "gsl_complex_polar imag part at (r=%g,t=%g)", r, t);
- }
-
- i = 0;
-
- while (list[i].f)
- {
- struct f t = list[i];
- gsl_complex z = gsl_complex_rect (t.x, t.y);
- double f = (t.f) (z);
- gsl_test_rel (f, t.fx, 10 * GSL_DBL_EPSILON, "%s at (%g,%g)", t.name, t.x, t.y);
- i++;
- }
-
- i = 0;
-
- while (listz[i].f)
- {
- struct fz t = listz[i];
- gsl_complex z = gsl_complex_rect (t.x, t.y);
- gsl_complex fz = (t.f) (z);
- double fx = GSL_REAL (fz), fy = GSL_IMAG (fz);
-
- #ifdef DEBUG
- printf("x = "); gsl_ieee_fprintf_double (stdout, &t.x); printf("\n");
- printf("y = "); gsl_ieee_fprintf_double (stdout, &t.y); printf("\n");
- printf("fx = "); gsl_ieee_fprintf_double (stdout, &fx); printf("\n");
- printf("ex = "); gsl_ieee_fprintf_double (stdout, &t.fx); printf("\n");
- printf("fy = "); gsl_ieee_fprintf_double (stdout, &fy); printf("\n");
- printf("ey = "); gsl_ieee_fprintf_double (stdout, &t.fy); printf("\n");
- #endif
-
- gsl_test_rel (fx, t.fx, 10 * GSL_DBL_EPSILON, "%s real part at (%g,%g)", t.name, t.x, t.y);
- gsl_test_rel (fy, t.fy, 10 * GSL_DBL_EPSILON, "%s imag part at (%g,%g)", t.name, t.x, t.y);
- i++;
- }
-
- exit (gsl_test_summary ());
- }
-